package com.rfs.lock;


/**
 * @author rfs
 * @date 2022/5/28 21:44
 * 死锁
 * 避免死锁常见方法：
 * 避免一个线程同时获取多个锁
 * 避免一个线程在锁内同时占有多个资源，尽量保证每个锁只占用一个资源、
 * 尝试使用定时锁，使用lock.tryLocck(timeout)来替换使用内部锁机制
 * 对于数据库锁，加锁和解锁必须在同一个数据库链接，否则会出现解锁失败的情况
 *
 */
public class DeadLockDemo {
    private static String A="A";
    private static String B="B";

    public static void main(String[] args) {
        deadLock();
    }
    private static void  deadLock() {
        new Thread(()->{
            synchronized (A) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (B) {
                    System.out.println(1);
                }
            }
        }).start();
        new Thread(()->{
            synchronized (B) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (A) {
                    System.out.println(2);
                }
            }
        }).start();
    }
}
